home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / dignet_2_1.lha / dignet / dignetterm / source / Startup.asm < prev   
Assembly Source File  |  1997-01-08  |  7KB  |  526 lines

  1. *****************************************************************************
  2. *    "Startup.asm"
  3. *
  4. *    $VER: Startup_asm stripped version 3.9 (10.10.96)
  5. *
  6. *    Copyright © 1995,1996 by Kenneth C. Nilsen/Digital Surface
  7. *    This source is freely distributable.
  8. *
  9. *    For instructions read the Startup_Asm.guide or the Startup_example.s
  10. *
  11. *****************************************************************************
  12.  
  13. zyxMax    = 17    ;max no. of libraries
  14. zyxBufZ    = 308    ;format buffer size
  15.  
  16. Return:    Macro
  17.     moveq    #\1,d0
  18.     rts
  19.     EndM
  20.  
  21. DefLib:    Macro
  22.  
  23.     lea    \1NamX(pc),a1
  24.     move.l    a1,(a5)+
  25.     move.l    a1,zyxNx
  26.     moveq    #\2,d0        ;if you use ver >127, change this to "move.l"
  27.     move.l    d0,(a5)+
  28.     move.l    d0,zyxVx
  29.     jsr    -552(a6)
  30.     move.l    d0,(a5)+
  31.  
  32.     move.l    d0,\1basX
  33.     bne.b    \1zyx
  34.  
  35.     bsr.w    zyxLibR
  36.     bra.b    \1zyx
  37.  
  38. \1basX:    dc.l    0
  39. \1NamX:    dc.b    "\1.library",0
  40.     even
  41. \1zyx:
  42.     EndM
  43.  
  44. DefEnd:    Macro
  45.     move.l    #-1,(a5)
  46.     rts
  47.     EndM
  48.  
  49. LibBase:    Macro
  50.     move.l    \1basX(pc),a6
  51.     EndM
  52.  
  53. TaskName:    Macro
  54.  
  55.     move.l    $4.w,a6
  56.     jsr    -132(a6)
  57.     move.l    zyxTask(pc),a0
  58.     move.l    #.TaskN,10(a0)
  59.     jsr    -138(a6)
  60.     bra.b    .zyxTsk
  61.  
  62. .TaskN:    dc.b    \1
  63.     dc.b    0
  64.     even
  65. .zyxTsk:
  66.     EndM
  67.  
  68. TaskPri:    Macro
  69.     move.l    $4.w,a6
  70.     move.l    zyxTask(pc),a1
  71.     moveq    #\1,d0
  72.     jsr    -300(a6)
  73.     EndM
  74.  
  75. TaskPointer:    Macro
  76.     move.l    zyxTask(pc),d0
  77.     EndM
  78.  
  79. StartFrom:    Macro
  80.     move.l    RtnMess(pc),d0
  81.     EndM
  82.  
  83.  
  84. NextArg:    Macro
  85.     move.l    zyxArgP(pc),d0
  86.     beq.b    .noA\@
  87.     move.l    d0,a0
  88.     bsr.w    zyxGArg
  89.     move.l    a0,zyxArgP
  90. .noA\@    tst.l    d0
  91.     EndM
  92.  
  93. DebugDump    MACRO
  94.  
  95.     IFD    DODUMP
  96.  
  97. .StartDump\@:
  98.  
  99.     movem.l    d0-d7/a0-a6,-(sp)
  100.  
  101.     move.l    zyxDosBase(pc),a6
  102.     jsr    -60(a6)
  103.     move.l    d0,d1
  104.     bne.b    .ok\@
  105.  
  106.     move.l    zyxHandle(pc),d1
  107.     beq.b    .debEnd\@
  108.  
  109. .ok\@    move.l    #.string\@,d2
  110.     move.l    #.stringSize\@,d3
  111.     jsr    -48(a6)
  112.  
  113.     bra.b    .debEnd\@
  114.  
  115. .string\@        dc.b    "DEBUG DUMP: ",27,"[1m",\1,27,"[0m",10
  116. .stringSize\@    = *-.string\@
  117.     even
  118.  
  119. .debEnd\@    btst    #2,$dff016
  120.         bne.b    .debEnd\@
  121. .hold\@    btst    #2,$dff016
  122.     beq.b    .hold\@
  123.     movem.l    (sp)+,d0-d7/a0-a6
  124.  
  125.     ENDC
  126.     ENDM
  127.  
  128. InitDebugHandler:    MACRO
  129.  
  130.     IFD    DODUMP
  131.  
  132.     tst.l    zyxHandle
  133.     bne.b    .exit
  134.  
  135.     move.l    zyxDosBase(pc),a6
  136.     jsr    -60(a6)
  137.     move.l    d0,zyxHandle
  138.     bne.b    .exit
  139.     st    zyxDebugHand
  140.     move.l    #.Dhand,d1
  141.     move.l    #1006,d2
  142.     jsr    -30(a6)
  143.     move.l    d0,zyxHandle
  144.     bra.b    .exit
  145.  
  146.     IFC    '\1',''
  147. .Dhand    dc.b    "CON:0/20/640/160/Debug Dump/CLOSE/WAIT",0
  148.     ENDC
  149.     IFNC    '\1',''
  150. .Dhand    dc.b    \1,0
  151.     ENDC
  152.     even
  153. .exit
  154.     ENDC
  155.     ENDM
  156.  
  157. InitArg    MACRO
  158.     move.l    #\1,zyxArgP
  159.     ENDM
  160.  
  161. InitArgs    MACRO
  162.     move.l    \1,zyxArgP
  163.     ENDM
  164.  
  165. Version:    Macro    ;obsolete!
  166.     NOP
  167.     EndM
  168.  
  169. GoZYX:    move.l    a0,-(sp)
  170.  
  171.     move.l    d0,zyxArgL
  172.     move.l    a0,zyxArgP
  173.  
  174.     move.l    $4.w,a6
  175.     move.l    a6,execbasX
  176.  
  177.     move.l    #zyxBufZ,d0
  178.     moveq    #1,d1
  179.     jsr    -198(a6)
  180.     move.l    d0,zyxBuff
  181.     beq.w    .DOS
  182.  
  183.     lea    zyxDos(pc),a1
  184.     moveq.l    #0,d0
  185.     jsr    -552(a6)
  186.     move.l    d0,zyxDosBase
  187.     beq.w    .DOS
  188.  
  189.     sub.l    a1,a1
  190.     jsr    -294(a6)
  191.     move.l    d0,a4
  192.     move.l    d0,zyxTask
  193.  
  194.     tst.l    172(a4)
  195.     bne.b    .chkPro
  196.  
  197.     moveq    #StartSkip,d0
  198.     bne.b    .chkPro
  199.     lea    92(a4),a0
  200.     jsr    -384(a6)
  201.     lea    92(a4),a0
  202.     jsr    -372(a6)
  203.     move.l    d0,RtnMess
  204.  
  205. .chkPro:
  206.     move.w    296(a6),d5
  207.  
  208.     IFD    CPUCHECK
  209.  
  210.     move.l    #Processor,d7
  211.     beq.w    .ProOk
  212.     cmp.w    #60,d7
  213.     ble.w    .nxPro1
  214.     sub.l    #68000,d7
  215.     beq.w    .ProOk
  216.  
  217. .nxPro1:
  218.     cmp.b    #10,d7
  219.     bne.b    .nxPro2
  220.     and.b    #$cf,d5
  221.     bne.w    .ProOk
  222.     bra.w    .ProErr
  223.  
  224. .nxPro2:
  225.     cmp.b    #20,d7
  226.     bne.b    .nxPro3
  227.     and.b    #$ce,d5
  228.     bne.w    .ProOk
  229.     bra.b    .ProErr
  230.  
  231. .nxPro3:
  232.     cmp.b    #30,d7
  233.     bne.b    .nxPro4
  234.     and.b    #$cc,d5
  235.     bne.b    .ProOk
  236.     bra.b    .ProErr
  237.  
  238. .nxPro4:
  239.     cmp.b    #40,d7
  240.     bne.b    .nxPro5
  241.     and.b    #$c8,d5
  242.     bne.b    .ProOk
  243.     bra.b    .ProErr
  244.  
  245. .nxPro5:
  246.     cmp.b    #60,d7
  247.     bne.b    .ProWho
  248.     btst    #7,d5
  249.     beq.b    .ProErr
  250.     btst    #6,d5
  251.     bne.b    .ProOk
  252.     bra.b    .ProErr
  253.  
  254. .ProWho:
  255.     lea    ProcWho(pc),a0
  256.     move.l    #Processor,ProcNum
  257.     lea    ProcNum(pc),a1
  258.     bsr.w    zyxPrt
  259.     bra.w    .End
  260.  
  261. .ProErr:
  262.     st    zyxLR
  263.     lea    ProcErr(pc),a0
  264.     add.l    #68000,d7
  265.     move.l    d7,ProcNum
  266.     lea    ProcNum(pc),a1
  267.     bsr.w    zyxPrt
  268.  
  269.     ENDC
  270.  
  271. .ProOk:    IFD    MATHCHECK
  272.  
  273.     move.l    #MathProc,d7
  274.     beq.w    .MathOk
  275.     sub.l    #68000,d7
  276.  
  277.     cmp.w    #881,d7
  278.     bne.b    .Math2
  279.     and.b    #$70,d5
  280.     bne.b    .MathOk
  281.     bra.b    .MathEr
  282.  
  283. .Math2:    cmp.w    #882,d7
  284.     bne.b    .Math3
  285.     and.b    #$60,d5
  286.     bne.b    .MathOk
  287.     bra.b    .MathEr
  288.  
  289. .Math3:    cmp.b    #60,d7
  290.     beq.b    .m60ok
  291.     cmp.b    #40,d7
  292.     bne.b    .MathEr
  293. .m60ok    btst    #6,d5
  294.     bne.b    .MathOk
  295.  
  296. .MathEr:
  297.     st    zyxLR
  298.     lea    ProcErr(pc),a0
  299.     move.l    #MathProc,ProcNum
  300.     lea    ProcNum(pc),a1
  301.     bsr.w    zyxPrt
  302.  
  303.     ENDC
  304.  
  305. .MathOk:
  306.     bsr.w    zyxLibO
  307.  
  308.     tst.b    zyxLR
  309.     bne.b    .noShow
  310.  
  311.     move.l    zyxArgP(pc),a0
  312.     move.l    zyxArgL(pc),d0
  313.  
  314.     bsr.w    Start
  315.     move.l    d0,zyxVal
  316.  
  317. .noShow:
  318.     bsr.w    zyxLibC
  319.  
  320. .End:    move.l    zyxBuff(pc),d0
  321.     beq.b    .noBuff
  322.     move.l    d0,a1
  323.     move.l    #zyxBufZ,d0
  324.     jsr    -210(a6)
  325.  
  326.     IFD    DODUMP
  327.  
  328.     tst.b    zyxDebugHand
  329.     beq.b    .none
  330.  
  331.     move.l    zyxDosBase(pc),a6
  332.     move.l    zyxHandle(pc),d1
  333.     beq.b    .none
  334.     jsr    -36(a6)
  335. .none    move.l    $4.w,a6
  336.  
  337.     ENDC
  338.  
  339.     move.l    zyxDosBase(pc),a1
  340.     jsr    -414(a6)
  341.  
  342. .noBuff:
  343.     tst.l    RtnMess
  344.     beq.w    .DOS
  345.  
  346.     jsr    -132(a6)
  347.     move.l    RtnMess(pc),a1
  348.     jsr    -378(a6)
  349.  
  350. .DOS:    move.l    (sp)+,a0
  351.     move.l    zyxVal(pc),d0
  352.     rts
  353.  
  354. zyxDo:    move.b    d0,(a3)+
  355.     rts
  356.  
  357. zyxPrt:    movem.l    d0-a6,-(sp)
  358.  
  359.     lea    zyxDo(pc),a2
  360.     move.l    zyxBuff(pc),a3
  361.     jsr    -522(a6)
  362.  
  363.     move.l    zyxDosBase(pc),a6
  364.  
  365.     jsr    -60(a6)
  366.     move.l    d0,d1
  367.     beq.b    .clDos
  368.  
  369.     move.l    zyxBuff(pc),d2
  370.     move.l    d2,a0
  371.     moveq    #0,d3
  372. .count:    addq    #1,d3
  373.     tst.b    (a0)+
  374.     bne.b    .count
  375.  
  376.     subq    #1,d3
  377.  
  378.     jsr    -48(a6)
  379.  
  380. .clDos:    lea    (a6),a1
  381.     move.l    $4.w,a6
  382.     jsr    -414(a6)
  383.  
  384. .exit:    movem.l    (sp)+,d0-a6
  385.     rts
  386.  
  387. zyxLibO:
  388.     move.l    #4*3*zyxMax,d0
  389.     moveq    #1,d1
  390.     jsr    -198(a6)
  391.     move.l    d0,zyxMem
  392.     beq.b    .memErr
  393.  
  394.     move.l    d0,a5
  395.     bsr.w    Init
  396.  
  397.     rts
  398.  
  399. .memErr:
  400.     lea    zyxFR(pc),a0
  401.     lea    zyxMeR(pc),a1
  402.  
  403.     bsr.w    zyxPrt
  404.  
  405.     st    zyxLR
  406.     rts
  407.  
  408. zyxLibC:
  409.     move.l    $4.w,a6
  410.  
  411.     move.l    zyxMem(pc),d0
  412.     beq.w    .noLibs
  413.     move.l    d0,a5
  414.  
  415. .loop:    cmp.l    #-1,(a5)
  416.     beq.b    .clEnd
  417.     move.l    8(a5),d0
  418.     beq.b    .noCl
  419.     move.l    d0,a1
  420.     jsr    -414(a6)
  421. .noCl:    lea    12(a5),a5
  422.     bra.b    .loop
  423.  
  424. .clEnd:    move.l    zyxMem(pc),a1
  425.     move.l    #4*3*zyxMax,d0
  426.     jsr    -210(a6)
  427.  
  428. .noLibs:
  429.     rts
  430.  
  431. zyxLibR:
  432.     st    zyxLR
  433.  
  434.     lea    zyxLib(pc),a0
  435.     lea    zyxNx(pc),a1
  436.     bsr.w    zyxPrt
  437.  
  438.     rts
  439.  
  440. zyxGArg:
  441.     move.b    (a0)+,d0
  442.     beq.w    .end
  443.     cmp.b    #10,d0
  444.     beq.w    .end
  445.     cmp.b    #9,d0
  446.     beq.b    zyxGArg
  447.     cmp.b    #32,d0
  448.     beq.b    zyxGArg
  449.  
  450.     move.l    zyxBuff(pc),a1
  451.     lea    -1(a0),a0
  452. .copy:    move.b    (a0)+,d0
  453.     beq.b    .stop
  454.     cmp.b    #10,d0
  455.     beq.b    .stop
  456.     cmp.b    #32,d0
  457.     beq.b    .eol
  458. .cont:    cmp.b    #'*',d0
  459.     beq.b    .chkSpc
  460.     cmp.b    #'"',d0
  461.     beq.b    .toggle
  462. .noChk:    move.b    d0,(a1)+
  463. .cont2:    bra.b    .copy
  464.  
  465. .chkSpc:
  466.     cmp.b    #'"',(a0)
  467.     bne.b    .chk2
  468.     move.b    #'"',(a1)+
  469.     lea    1(a0),a0
  470.     bra.b    .copy
  471. .chk2:    cmp.b    #'n',(a0)
  472.     bne.b    .noChk
  473.     move.b    #10,(a1)+
  474.     lea    1(a0),a0
  475.     bra.b    .copy
  476.  
  477. .toggle:
  478.     tst.b    zyxQ
  479.     beq.b    .set
  480.     sf    zyxQ
  481.     bra.b    .stop
  482. .set:    st    zyxQ
  483.     bra.b    .cont2
  484.  
  485. .eol:    tst.b    zyxQ
  486.     bne.b    .cont
  487.  
  488. .stop:    tst.b    zyxQ
  489.     bne.b    .end
  490.     clr.b    (a1)
  491.     move.l    zyxBuff(pc),d0
  492.     rts
  493.  
  494. .end:    moveq    #0,d0
  495.     rts
  496.  
  497. RtnMess:    dc.l    0
  498. ProcNum:    dc.l    0
  499. execbasX:    dc.l    0
  500. zyxArgL:    dc.l    0
  501. zyxArgP:    dc.l    0
  502. zyxVal:        dc.l    0
  503. zyxMem:        dc.l    0
  504. zyxNx:        dc.l    0
  505. zyxVx:        dc.l    0
  506.     IFD    DODUMP
  507. zyxHandle:    dc.l    0
  508.     ENDC
  509. zyxDosbase    dc.l    0
  510. zyxTask:    dc.l    0
  511. zyxBuff:    dc.l    0
  512. zyxMeR:        dc.l    zyxMemR
  513.     IFD    DODUMP
  514. zyxDebugHand:    dc.b    0
  515.     ENDC
  516. zyxLR:        dc.b    0
  517. zyxQ:        dc.b    0
  518.  
  519. zyxDos:        dc.b    'dos.library',0
  520. zyxLib:        dc.b    "Can't open %s v. %ld",10,0
  521. zyxMemR:    dc.b    'Low memory!',10,0
  522. zyxFR:        dc.b    '%s',0
  523. ProcWho:    dc.b    'Right! %ld ?',10,0
  524. ProcErr:    dc.b    'Need %ld or better!',10,0
  525.         even
  526.